﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DBSystem.Entities;
using PagedList; 

namespace DBSystem.DataAccess
{
    public class ProductoDAO : MasterDataAccess, IProductoDAO  
    {
        public List<Producto> GetAllFromProducto()
        {
          //return Context.Productoes.Skip(1).Take(10).ToList() ;  

            var query = from p in Context.Productoes
                        orderby p.Id
                        select p;

            return query.Skip(1).Take(10).ToList();    
        }

        public List<Producto> GetAllFromProductoByCriterio(string criterio)
        {
            var query = from p in Context.Productoes
                        select p;

            if (criterio != null)
            {
                query = query.Where(p => p.Codigo.ToUpper().StartsWith(criterio.ToUpper()) ||
                                    p.Descripcion.ToUpper().StartsWith(criterio.ToUpper()) ||
                                    p.Codigo.ToUpper().Contains(criterio.ToUpper()) ||
                                    p.Descripcion.ToUpper().Contains(criterio.ToUpper()));  
            }

            return query.OrderBy(p=>p.Codigo ).Skip(1).Take(15).ToList();    
        }

        public Producto GetFromProductoById(int id)
        {
            return Context.Productoes.Find(id);  
        }

        public void AddProducto(Producto producto)
        {
            Context.Productoes.Add(producto);
            Context.SaveChanges();  
        }

        public void UpdateProducto(Producto producto)
        {
            //var existe = Context.Productoes.Find(producto.Id);

            //if (existe!= null)
            //{
                Context.Entry(producto).State = System.Data.EntityState.Modified;
                Context.SaveChanges(); 
            //}
             
        }

        public void RemoveProducto(int id)
        {
            var existe = Context.Productoes.Find(id);

            if (existe !=null )
            {
                Context.Productoes.Remove(existe);
                Context.SaveChanges(); 
            }
        }

        public IPagedList<Producto> GetAllFromProductoByCriterio(string criterio, int page, int size)
        {
            var query = from p in Context.Productoes
                        select p;

            if (criterio != null)
            {
                query = query.Where(p => p.Codigo.ToUpper().StartsWith(criterio.ToUpper()) ||
                                    p.Descripcion.ToUpper().StartsWith(criterio.ToUpper()) ||
                                    p.Codigo.ToUpper().Contains(criterio.ToUpper()) ||
                                    p.Descripcion.ToUpper().Contains(criterio.ToUpper()));
            }

            return query.OrderBy(p => p.Codigo).ToPagedList(page,size);
        }
    }
}
